#include "common.hpp"

int main()
{
    Init init;
    int shmid = CreatShareMem();
    char* shmaddr = (char*)shmat(shmid, nullptr, 0);
    // 一旦有人把数据写入到共享内存，其实我们立马能看到了
    // 不需要经过系统调用，直接就能看到数据了!
    // IPC code, 让A进程读
    struct shmid_ds shmds;
    // 打开信道
    int fd = open(FIFO_FILE, O_RDONLY);      // 等待写入方打开之后, 自己才会打开文件, 向后执行, open 阻塞了！
    if(fd == -1) {
        log(FATAL, "open error, %s", strerror(errno));
        exit(FIFO_OPEN_ERR);
    }
    while(true) {
        char c;
        ssize_t s = read(fd, &c, 1);
        if(s == 0)  break;
        else if(s == -1)    break;
        cout << "Process say@ " << shmaddr;   // 直接访问共享内存
        // shmctl(shmid, IPC_STAT, &shmds);
        // cout << "No. of current attaches" << shmds.shm_nattch<<endl;
        // cout << "key is" << shmds.shm_perm.__key<<endl;
        // sleep(1);
    }
    shmdt(shmaddr);
    shmctl(shmid, IPC_RMID, nullptr);
    close(fd);
    return 0;
}